﻿// 功能：地图标记的标签。只能设置{0~9}{A~Z}等字符。英文字符必须为大写。
// 描述：
// 作者：温伟鹏
// 日期：2010/10/22 13:51:41

using System;
using System.Text.RegularExpressions;

namespace GoogleMaps
{
    /// <summary>
    /// 地图标记的标签。只能设置{0~9}{A~Z}等字符。英文字符必须为大写。
    /// </summary>
    public class MarkerLabel
    {
        private string label;

        #region 公共属性
        /// <summary>
        /// 获取一个值，指示标记标签是否为空
        /// </summary>
        public bool IsNull
        {
            get
            {
                return String.IsNullOrEmpty(this.label);
            }
        }
        /// <summary>
        /// 获取或设置标签文本
        /// </summary>
        public string Text
        {
            get
            {
                return this.label;
            }
            set
            {
                if (value != this.label)
                {
                    if (!String.IsNullOrEmpty(value) && value.Length > 1)
                    {
                        throw new Exception("地图标记中的标签文本最多只能有一个字符，且必须为{0~9A~Z}中的一个。也可以设置为空。");
                    }

                    if (String.IsNullOrEmpty(value))
                        this.label = string.Empty;
                    else
                    {
                        Regex re = new Regex("[0-9A-Z]", RegexOptions.None);
                        MatchCollection mc = re.Matches(value);

                        if (mc.Count != 1)
                        {
                            throw new Exception("地图标记中的标签文本最多只能有一个字符，且必须为{0~9A~Z}中的一个。也可以设置为空。");
                        }

                        this.label = value.ToUpper();
                    }
                }
            }
        }
        #endregion

        #region 构造函数
        /// <summary>
        /// 构造地图标志中显示的标签实例
        /// </summary>
        /// <param name="label">标签文本。最大长度为1。范围[0-9A-Z]</param>
        public MarkerLabel(string label)
        {
            Text = label;
        }
        #endregion

        #region 函数
        /// <summary>
        /// 获取描述此地图标志标签的字符串
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            if (!IsNull)
                return string.Format("label:{0}", Text);
            return string.Empty;
        }
        /// <summary>
        /// 判断给定的标签与本标签是否相等
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            if (obj == null && IsNull)
                return true;

            return String.Compare(Text, Convert.ToString(obj)) == 0;
        }
        #endregion
    }
}
